package com.example.qinghe.util;
import java.math.BigDecimal;

public class StrLocation {
    public static final BigDecimal EARTH_RADIUS = new BigDecimal("6371"); // 地球半径，单位为千米

    public static boolean isCoordinateInRange(BigDecimal lat1, BigDecimal lon1, BigDecimal lat2, BigDecimal lon2, BigDecimal range) {
        BigDecimal dLat = lat2.subtract(lat1);
        BigDecimal dLon = lon2.subtract(lon1);

        BigDecimal lat1Radians = new BigDecimal(Math.toRadians(lat1.doubleValue()));
        BigDecimal lat2Radians = new BigDecimal(Math.toRadians(lat2.doubleValue()));
        BigDecimal dLatRadians = new BigDecimal(Math.toRadians(dLat.doubleValue()));
        BigDecimal dLonRadians = new BigDecimal(Math.toRadians(dLon.doubleValue()));

        BigDecimal a = new BigDecimal(Math.sin(dLatRadians.doubleValue()/2))
                .multiply(new BigDecimal(Math.sin(dLatRadians.doubleValue()/2)))
                .add(new BigDecimal(Math.cos(lat1Radians.doubleValue()))
                        .multiply(new BigDecimal(Math.cos(lat2Radians.doubleValue()))
                                .multiply(new BigDecimal(Math.sin(dLonRadians.doubleValue()/2))
                                        .multiply(new BigDecimal(Math.sin(dLonRadians.doubleValue()/2))))));

        BigDecimal c = new BigDecimal(2)
                .multiply(new BigDecimal(Math.atan2(Math.sqrt(a.doubleValue()), Math.sqrt(1-a.doubleValue()))));

        BigDecimal distance = EARTH_RADIUS.multiply(c); // 计算两个经纬度之间的距离，单位为千米

        return distance.compareTo(range) <= 0;
    }
}
